package eSchool.GUI.Components;

import eSchool.Application.State.DataState;
import eSchool.BL.AlunosInscritos;
import eSchool.BL.AlunoInscrito;
import eSchool.BL.BasicEntityObject;
import eSchool.BL.BasicListObject;
import eSchool.BL.CriteriosPesquisa;
import eSchool.BL.Disciplina;
import eSchool.BL.Disciplinas;
import eSchool.Utils.DateTime;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.TableModel;


public class UIConectorDisciplina implements IUIConector{

    private int tipo;
    private BasicListObject lista;
    private BasicEntityObject detalhe;
    private AlunosInscritos alunosInscritos;

    public UIConectorDisciplina() {
        this.tipo = 4;
        lista = new Disciplinas();
        detalhe = new Disciplina();
    }
    
    public int getTipo(){
        return tipo;
    }
    
    private BasicEntityObject getNovoDetalhe() {
        return new Disciplina();
    }

    public TableModel getLista() {
        return lista;
    }

    public TableModel getDetalhe() {
        if (detalhe == null) {
            detalhe = getNovoDetalhe();
        }

        return detalhe;
    }

    public TableModel pesquisaLista(CriteriosPesquisa criterios) { 
        try{
            lista = DataState.getConnection().getDisciplinas(criterios);
        } catch (Exception ex) {
            Logger.getLogger(UIConectorDisciplina.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lista;
    }

    public TableModel pesquisaDetalhe(CriteriosPesquisa criterios) {
        try {
           detalhe = DataState.getConnection().getDisciplina(criterios.get(0).getValor().toString());
        } catch (Exception ex) {
            Logger.getLogger(UIConectorDisciplina.class.getName()).log(Level.SEVERE, null, ex);
        }

        return detalhe;

    }

    public void setDataSource(BasicListObject lista, BasicEntityObject detalhe) {
        this.lista = lista;
        this.detalhe = detalhe;
    }

    public void gravaDetalhe(TableModel tableModel) {
        try {
            detalhe = (Disciplina)tableModel;
           
            DataState.getConnection().gravaDisciplina((Disciplina)detalhe);
            for(AlunoInscrito ali : alunosInscritos){
                 ali.setCodDisciplina(((Disciplina)detalhe).getCodDisciplina());
                 DataState.getConnection().gravaAlunoInscrito(ali);
            }
            
        } catch (Exception ex) {
            Logger.getLogger(UIConectorDisciplina.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void addInscricao(String numAluno) throws Exception{
        
        Boolean encontrado = false;
        
      
        for(AlunoInscrito ali : alunosInscritos){
            if(ali.getNumAluno().equals(numAluno)){
                encontrado = true;
            }
        }
        
        if(!encontrado){
            AlunoInscrito alunoInscrito = new AlunoInscrito();
            alunoInscrito.setAno((new DateTime()).getYear());
            alunoInscrito.setSemestre(2);
            alunoInscrito.setCodDisciplina(((Disciplina)detalhe).getCodDisciplina());
            alunoInscrito.setNumAluno(numAluno);
            alunosInscritos.add(alunoInscrito);
        }
        
    }
    
    
    public TableModel getDadosExtra(int tipo, CriteriosPesquisa criterios) {
         try{
            switch(tipo){
                case 0:
                    alunosInscritos = DataState.getConnection().getAlunosInscritos(criterios);
                    return alunosInscritos;
                case 1:
                    return DataState.getConnection().getDocentes(criterios);
                case 2:
                    return DataState.getConnection().getAlunos(criterios);
                default:
                    return null;
            }
        } catch (Exception ex) {
            Logger.getLogger(UIConectorDisciplina.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lista;
    }
}
